package {
	import UIFree.uif_styles;
	
	import UIUtils.uif_json;
	
	import api.clt_mailserver;
	import api.clt_myserver;
	
	import api_servers.api_server;
	
	import classes.clt_plugins;
	import classes.clt_styles;
	
	import com.adobe.images.PNGEncoder;
	
	import components.clt_layer;
	import components.debug.clt_debugLayer;
	import components.plugins.clt_speak;
	import components.plugins.duplicate.clt_personage;
	import components.plugins.duplicate.clt_personageInitObject;
	import components.plugins.effects.clt_effectsInitObject;
	import components.plugins.frames.clt_framesInitObject;
	import components.plugins.mlp.clt_mlpInitObject;
	import components.plugins.search.clt_searchInitObject;
	
	import data.cd_clothing;
	import data.cd_hairs;
	import data.clt_data;
	
	import flash.display.BitmapData;
	import flash.geom.Point;
	import flash.system.Security;

	public class clothing extends clt_clothingBase {
		public static const NOTEXTLINKPRICE: Number = 30;
		
		public static const toDiskSize: Point = new Point(600, 600);
		
		public function clothing() {
			Security.allowDomain('*');
			Security.loadPolicyFile('http://content.foto.my.mail.ru/' + clt_servers.CROSSDOMAINFILE);
			Security.loadPolicyFile('http://avt.appsmail.ru/' + clt_servers.CROSSDOMAINFILE);
			Security.loadPolicyFile(clt_servers.TMPL_URL + clt_servers.CROSSDOMAINFILE);
			super(stage.stageWidth, stage.stageHeight);
		}
		
		protected function debugInit(): void {
			new clt_debugLayer(layers[0], 200, clt_layer.ALIGNTOP, 'block');
		}
		
		override protected function createComponents():void {
			
		}
		
/*		override public function filterAlbums(a_albums: Array): Array {
			return a_albums.filter(function(item: Object, i: int, arr: Array): Boolean {
				return item.privacy == 2;
			});
		}*/
		
		protected function superCreateComponents():void {
			super.createComponents();
		}
		
		override protected function initialize(): void {
//			clt_plugins.addPlugin(' Произнести речь ', clt_speak);
			new clt_effectsInitObject(this);
			new clt_framesInitObject(this);
			new clt_mlpInitObject(this);
			new clt_searchInitObject(this);
			new clt_personageInitObject(this);
			
			super.initialize();
			internalServer.getTemplates(function(a_data: Object): void {
				if (a_data.response[0].length > 0) {
					var list: Array = a_data.response[0];
					var cloths: Array = new Array();
					var hairs: Array = new Array();
					list.forEach(function(item: Object, index: int, arr: Array): void {
						var a_item: Object = item;
						a_item.id = parseInt(a_item.id);
						a_item.ears = uif_json.d(a_item.ears);
						a_item.group = parseInt(a_item.group);
						if (a_item.corr) a_item.corr = uif_json.d(a_item.corr);
						if (a_item.ws) a_item.ws = parseInt(a_item.ws);
						
						if (item.type == 'c') cd_clothing.list.push(a_item);
						else cd_hairs.list.push(a_item);
					});
					
					cd_hairs.list.sortOn('id', Array.NUMERIC | Array.DESCENDING);
					cd_clothing.list.sortOn('id', Array.NUMERIC | Array.DESCENDING);
				}
				superCreateComponents();
				debugInit();
				
				processingParams(externalServer.flashVars);
			});
		}
		
		override protected function initSiteData(): Object {
			return {
				STARTDESCRIPTION		: '<font size="22">Всего лишь %s приложение!</font>\n' + This.classes.locale.INVITEDETAIL,
				NOUSERALBUMACCESS		: 'Нет доступа к альбомам пользователя, приложение не установлено.\nПригласите друга для получения доступа к альбомам.',
				NOALBUMS				: 'Нет доступных альбомов',
				EMPTYGAME				: 'Коллаж удален в связи с окончанием конкурса.',
				INPUTNAMEGAME			: 'Введите название вашего коллажа',
				TEXTFROMRESULT			: 'http://oformi-foto.ru',
				NOLINKTEXTDESC			: 'Стоимость использования коллажей без текста ссылки на приложение ' + NOTEXTLINKPRICE + 
											' мэйликов. Действие услуги без ограничения по времени.\nВы хотите убрать надпись за ' + NOTEXTLINKPRICE + ' мэйликов?',
				BANDESCR				: 'Ваша жалоба принята и будет рассмотрена в ближайшее время',
				NOBANSET				: 'На коллаж можно пожаловаться только в период действия конкурса'
			};
		}
		
		override protected function queryUserData(postFunc: Function): void {
			postFunc({
				sex: (externalServer.flashVars['sex']?externalServer.flashVars['sex']:1),// По версии моего мира 0-мужчина 1-женщина
				age: 30
			});
		}
		
		override protected function initTopBanner(): void {
//			new clt_topBannersMM(this);
		}
		
		override public function get saveMenuList(): Array {
			return [
				{caption: ' На компьютер ', method				: doToDisk},
				{caption: ' Только фигуру ', method				: doToFilePNG},
				{caption: ' Отправить на конкурс ', method		: doToGame}
			]
		}
		
		protected function doToDisk(): void {
			getResult(toDiskSize.x, toDiskSize.y, function(result: BitmapData): void {
				saveToFile(encodeFromJPG(result));
				result.dispose();
			});
		}

		protected function doToFilePNG(): void {
			getResult(toDiskSize.x, toDiskSize.y, function(result: BitmapData): void {
				saveToFile(PNGEncoder.encode(result), externalServer.viewer_id + '_' + (Math.random() * 100000).toString() + clt_data.PNGEXT);
				result.dispose();
			}, {noback: true});
		}

		override protected function createInternalServer(): api_server {
			return new clt_myserver(this, clt_servers.MAIN_URL + '/games/index.php', externalServer.app_id, externalServer.secrets[externalServer.app_id]);
		}
		
		override protected function createExternalServer(): api_server {
			return new clt_mailserver(this);
		}
		
		protected function doToAlbum(): void {
			
		}

		protected function doToQuestion(): void {
			
		}
		
		override protected function getStyles(): uif_styles {
			return new clt_styles();
		}
	}
}